package com.uc3m.dsic.gestorZoo;

import java.sql.SQLException;

/**
 * Esta clase se caracteriza por los siguientes atributos:id_sala, aforo_sala,
 * nombre, zoo
 *
 * @author Noelia Garcia Toledo
 */
public class Sala {

    /**
     * Identificador de la sala
     */
    String id_sala;
    /**
     * Aforo de la sala
     */
    int aforo_sala;
    /**
     * Nombre de la sala
     */
    String nombre;
    /**
     * Zoo al que pertenece la sala
     */
    String zoo;

    /**
     * Crea un obtejo de tipo Sala
     *
     * @param id
     *          identificador de la sala
     * @param aforo
     *          aforo de la sala
     * @param nom
     *          nombre de la sala
     * @param zoologico
     *          zoo al que pertenece la sala
     * @throws ZooException
     * @throws Exception
     */
    public Sala(String id, int aforo, String nom, String zoologico) 
            throws ZooException, Exception{
        if (!id.contains("'") && !nom.contains("'") && !zoologico.contains("'")) {
            if(aforo >= 0){
                GestorZoo gzoo = new GestorZoo();
                Zoo z = gzoo.getZoobyId(zoologico);
                if (z != null) {
                    id_sala = id;
                    aforo_sala = aforo;
                    nombre = nom;
                    zoo = zoologico;
                } else {
                    throw new ZooException("No existe el zoo asociada a la sala.\n"
                            + "Por favor introduza la clave de una zoo que exista");
                }
            }else{
                throw new ZooException("El aforo nunca puede ser negativo.");
            }
        } else {
            throw new ZooException ("No se admite el caracter '. "
                    + "Por favor, modifiquelo");
        }
    }

     /**
     * Constructor que crea una sala a partir de un resultado de la base
     * de datos
     *
     * @param fila
     *          Fila obtenida en la base de datos
     * @throws ZooException
     * @throws SQLException
     */
    public Sala (java.sql.ResultSet fila) throws ZooException, SQLException{

        if (fila == null){
            throw new ZooException ("La fila esta vacia. No se puede crear "
                    + "la Sala sin campos en la fila de entrada.");
        }
        if (fila.getMetaData().getColumnCount() != 4){
            throw new ZooException ("La fila no contiene los cuatro atributos" 
                    + " que caracterizan una Sala: id_sala, aforo, nombre e"
                    + " id_zoo del zoo al que pertenece.\nMirar la tabla "
                    + GestorZooAplicacion.FICHERO_BD + " de la carpeta donde "
                    + "esta instalado esta aplicacion.\nUna fila de la Tabla "
                    + "SALA debe respetar ese formato.");
        }
        //hasta aqui ok. Se construye el animal con los cuatro parametros de
        //la fila
        this.id_sala = fila.getString(1);
        this.aforo_sala = fila.getInt(2);
        this.nombre = fila.getString(3);
        this.zoo = fila.getString(4);
        //this (fila.getString(1),fila.getString(2),fila.getString(3),
        //fila.getString(4) );
    }

    /**
     * Devuelve el identificador de la sala
     *
     * @return nombre de la sala
     */
    public String getIdSala() {
        return id_sala;
    }

    /**
     * Devuelve el aforo que tiene una sala
     *
     * @return aforo de la sala
     */
    public int getAforoSala() {
        return aforo_sala;
    }

    /**
     * Devuelve el nombre de la sala
     *
     * @return nombre de la sala
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * Devuelve el zoo al que pertenece una sala
     *
     * @return nombre del zoo
     */
    public String getZoo() {
        return zoo;
    }

    /**
     * Modifica el identificador de la sala
     *
     * @param id
     *          identificador de la sala
     */
    public void setIdSala(String id) {
        id_sala = id;
    }

    /**
     * Modifica el aforo de la sala
     *
     * @param aforo
     *          aforo de la sala
     */
    public void setAforoSala(int aforo) {
        aforo_sala = aforo;
    }

    /**
     * Modifica el nombre de la sala
     *
     * @param nom
     *          nombre de la sala
     */
    public void setNombre(String nom) {
        nombre = nom;
    }

    /**
     * Modifica el zoo al que pertenece una sala
     *
     * @param zoologico
     *          zoo al que pertenece la sala
     */
    public void setZoo(String zoologico) {
        zoo = zoologico;
    }

    /**
     * Conversor de integer a string.
     *
     * @param parametro
     *          Numero a convertir en cadena de caracteres
     * @return El numero convertido en cadena de caracteres
     */
    public String toString(int parametro){
        String conversion = Integer.toString(parametro);
        return conversion;
    }

    /**
     * Inserta una nueva Sala en la base de datos
     *
     * @throws SQLException
     */
    public void insertarSala() throws SQLException {
        GestorZooInterface izoo = new GestorZooAplicacion();
        String inserta = "INSERT INTO SALA VALUES";
        String parametros[] = {id_sala.trim().toUpperCase(),
                toString(aforo_sala).trim().toUpperCase(),
                nombre.trim().toUpperCase(), zoo.trim().toUpperCase()};
        izoo.actualiza(inserta, parametros);
        izoo.cerrarBD();
    }

    /**
     * Borra una Sala de la tabla
     *
     * @throws SQLException
     */
    public void borrarSala() throws SQLException {
        GestorZooInterface izoo = new GestorZooAplicacion();
        izoo.actualiza("DELETE FROM SALA WHERE Id_sala = '" 
                + id_sala.trim().toUpperCase() + "';");
        izoo.cerrarBD();
    }
}